home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_06 / pjp / iostream.c < prev    next >
C/C++ Source or Header  |  1995-04-06  |  1KB  |  50 lines

  1. ------------- Listing 2: The file iostream.c ------------------
  2.  
  3.  
  4. // iostream -- ios::Init members, standard streams
  5. #include <iostream>
  6. #include <new>
  7. #include <stdio.h>
  8.  
  9.         // object declarations
  10. int ios::Init::_Init_cnt = -1;
  11. static filebuf fin(ios::_Noinit);
  12. static filebuf fout(ios::_Noinit);
  13. static filebuf ferr(ios::_Noinit);
  14. istream cin(ios::_Noinit);
  15. ostream cout(ios::_Noinit);
  16. ostream cerr(ios::_Noinit);
  17. ostream clog(ios::_Noinit);
  18.  
  19. ios::Init::Init()
  20.     {       // initialize standard streams first time
  21.     if (0 <= _Init_cnt)
  22.         ++_Init_cnt;
  23.     else
  24.         {       // initialize standard streams
  25.         new (&fin) filebuf(stdin);
  26.         new (&cin) istream(&fin);
  27.         cin.tie(&cout);
  28.         new (&fout) filebuf(stdout);
  29.         new (&cout) ostream(&fout);
  30.         new (&ferr) filebuf(stderr);
  31.         new (&cerr) ostream(&ferr);
  32.         cerr.tie(&cout);
  33.         cerr.setf(ios::unitbuf);
  34.         new (&clog) ostream(&ferr);
  35.         clog.tie(&cout);
  36.         _Init_cnt = 1;
  37.         }
  38.     }
  39.  
  40. ios::Init::~Init()
  41.     {       // flush standard streams last time
  42.     if (--_Init_cnt == 0)
  43.         {       // flush standard streams
  44.         cout.flush();
  45.         cerr.flush();
  46.         clog.flush();
  47.         }
  48.     }
  49.  
  50.